package com.nancy.springioc.bean.factory.support;

import com.nancy.springioc.bean.factory.BeanDefinition;

/**
 * 注册表接口：用于存放BeanDefinition对象，方便后续通过BeanDefinition对象获取BeanDefinition对象
 *
 * @author Nanc
 */
public interface BeanDefinitionRegistry {
    /**
     * 注册BeanDefinition对象到注册表中
     *
     * @param beanName       Bean的名称
     * @param beanDefinition BeanDefinition对象
     */
    void registerBeanDefinition(String beanName, BeanDefinition beanDefinition);

    /**
     * 根据Bean的名称获取BeanDefinition对象
     *
     * @param beanName Bean的名称
     * @return BeanDefinition对象
     */
    BeanDefinition getBeanDefinition(String beanName);

    /**
     * 移除BeanDefinition对象
     * @param beanName Bean的名称
     */
    void removeBeanDefinition(String beanName);

    /**
     * 判断是否包含BeanDefinition对象
     *
     * @param beanName Bean的名称
     * @return 是否包含
     */
    boolean containsBeanDefinition(String beanName);

    /**
     * 获取BeanDefinition对象的数量
     *
     * @return BeanDefinition对象的数量
     */
    int getBeanDefinitionCount();

    /**
     * 获取BeanDefinition对象的名称
     *
     * @return BeanDefinition对象的名称
     */
    String[] getBeanDefinitionNames();

    /**
     * 清除BeanDefinition对象
     */
    void clearRegistry();
}
